lexer grammar CLexer;

options {
  language = Java;
}

@header {
package PL.prac8;
}

WHILE: 'while';
IF: 'if';
VOID: 'void';
BREAK: 'break';
FOR: 'for';
fragment INT: 'int';
fragment CHAR: 'char';
fragment FLOAT: 'float';
TIPO: (INT | CHAR | FLOAT);
ALLAVE: '{';
CLLAVE: '}';
APARENTESIS: '(';
CPARENTESIS: ')';
ACORCHETE: '[';
CCORCHETE: ']';
COMPARADORES: ('>'| '<'| '=='| '<=' | '>=');
IGUAL: ('=');
MAS: '+';
MENOS: '-';
ASTERISCO: '*';
BARRA: '/';
AND: '&&';
OR: '||';
NOT: '!';
INTERROGANTE: '?';
DOSPUNTOS: ':';
SEPARADOR: (';');
COMA: (',');
MAIN: ('main');

fragment ESPACIO: (' ');
  fragment NUEVA_LINEA: ('\r\n'|'\n');
    BLANCO: (ESPACIO|'\t'|'\r'|NUEVA_LINEA) {$channel = HIDDEN;}; 
  COMENTARIO: '/*' (options {greedy=false;}:.)* '*/'{$channel = HIDDEN;};
  fragment BARRAS: ('//');
  LINEA_COMENTARIO: BARRAS (.)* NUEVA_LINEA {$channel = HIDDEN;};

fragment LETRA : ('a'..'z')| ('A'..'Z')|'_'; 
  IDENT: LETRA (DIGITO|LETRA)*;
fragment DIGITO : '0'..'9'; 
  NUMERO : MENOS? (DIGITO)+ ('.' DIGITO+)?;
  
fragment COMILLAS: '"';
CADENA: COMILLAS (~(COMILLAS))* COMILLAS;

fragment COMILLA: '\'';
CARACTER: COMILLA (LETRA|DIGITO|ESPACIO) COMILLA;


